from rest_framework import generics
from home.home_serializers import WheelSerializer,NavSerializer,ShopSerializer,MainShowSerializer,MustBuySerializer
from home.models import AxfWheel,AxfNav,AxfShop,AxfMainshow,AxfMustbuy
from rest_framework.response import Response

# Create your views here.


class HomeListView(generics.GenericAPIView):
    # 自动生成接口文档，文档中的内容(即接口介绍)写在下面的三引号注释中，且格式就是这样；当前类支持多种请求方式时，每种请求方式都要写。文档页中Query Parameters中的Description若有内容，是从官方文档中自动提取的；文档页中Interact按钮可直接测试接口
    '''
    get:
    获取首页数据
    '''
    queryset = AxfWheel.objects.all() # 查询结果集
    serializer_class = WheelSerializer # 指定序列化器，是父类GenericAPIView的属性，父类中后面的get_serializer()方法用到它，

    def get(self,request):
        # 展示首页数据不止需要一个AxfWheel模型的数据，需要多个模型
        nav_queryset=AxfNav.objects.all()
        shop_queryset=AxfShop.objects.all()
        mainshow_queryset=AxfMainshow.objects.all()
        mustbuy_queryset=AxfMustbuy.objects.all()

        wheel_serializer=self.serializer_class(instance=self.get_queryset(),many=True) # get_queryset()方法得到查询结果集，也可以用self.queryset.all()
        nav_serializer=NavSerializer(instance=nav_queryset,many=True) # 创建序列化类的对象。instance参数是要序列化的数据；数据里有多条时可用第二个参数many，数据里只有一条时不用。序列化时将要序列化的数据传给instance参数。
        shop_serializer=ShopSerializer(instance=shop_queryset,many=True)
        mainshow_serializer=MainShowSerializer(instance=mainshow_queryset,many=True)
        mustbuy_serializer=MustBuySerializer(instance=mustbuy_queryset,many=True)

        '''
        Response()返回给客户端的可以是json格式，也可以是HTML，会根据客户端的请求头中的信息返回正确的类型。若返回HTML，浏览器收到后会渲染。不像JsonResponse()那样只能返回json格式。
        JsonResponse()返回的数据，postman的Raw和浏览器直接访问都不显示中文；Response()返回的数据可以直接显示中文，且浏览器访问时显示的是djangorestframework自带的调试页面。
        '''
        return Response({
            'code':200, # vue中写的code(别人写的vue，且已编译，修改的话需要重新编译)，所以这里用code不用status，否则前端无法正确接收数据
            'msg':'请求成功',
            'data':{ # 字典里的键也是vue写好的，也不能用其他名字
                'main_wheels':wheel_serializer.data, # data属性可以获取序列化后的数据
                'main_navs':nav_serializer.data,
                'main_mustbuys':mustbuy_serializer.data,
                'main_shops':shop_serializer.data,
                'main_shows':mainshow_serializer.data,
            }
        })